#include"RingQueue.hpp"
#include<iostream>
#include<unistd.h>
#include<string.h>
#include<pthread.h>

void*customer(void*args)
{
    Ringqueue<int>*rq=static_cast<Ringqueue<int>*>(args);
    while(true)
    {
        // sleep(1);
        int data=0;
        rq->Pop(&data);
        std::cout<<"消费者消费了一个是数据："<<data<<std::endl;
    }
    return (void*)0;
}

void*product(void*args)
{
    Ringqueue<int>*rq=static_cast<Ringqueue<int>*>(args);
    int data=0;
    while(true)
    {
        rq->Enqueue(data);
        std::cout<<"生产者生产了一个数据："<<data<<std::endl;
        data++;
    }
    return (void*)0;
}

int main()
{
    // pthread_t c,p;
    // Ringqueue<int>*rq=new Ringqueue<int>();
    // pthread_create(&c,nullptr,customer,(void*)rq);
    // pthread_create(&p,nullptr,product,(void*)rq);

    // pthread_join(c,nullptr);
    // pthread_join(p,nullptr);

    pthread_t c[2],p[3];
    Ringqueue<int>*rq=new Ringqueue<int>();
    pthread_create(c,nullptr,customer,(void*)rq);
    pthread_create(c+1,nullptr,customer,(void*)rq);
    pthread_create(p,nullptr,product,(void*)rq);
    pthread_create(p+1,nullptr,product,(void*)rq);
    pthread_create(p+2,nullptr,product,(void*)rq);

    pthread_join(c[0],nullptr);
    pthread_join(c[1],nullptr);
    pthread_join(p[0],nullptr);
    pthread_join(p[1],nullptr);
    pthread_join(p[2],nullptr);

    delete rq;
    return 0;
}